import { createApp } from 'vue';

import Cookies from 'js-cookie';

import ElementPlus from 'element-plus';
import { getElementLabelLine } from 'element-tree-line';
import 'element-tree-line/dist/style.css';
import locale from 'element-plus/es/locale/lang/zh-cn'; // 中文语言

import '@/assets/styles/index.scss'; // global css

import App from './App';
import store from './store';
import router from './router';
import directive from './directive'; // directive

// 注册指令
import plugins from './plugins'; // plugins
import { download } from '@/utils/request';

// svg图标
import 'virtual:svg-icons-register';
import SvgIcon from '@/components/SvgIcon';
import elementIcons from '@/components/SvgIcon/svgicon';

import './permission'; // permission control

import { useDict, useShareDict, useShareDictWait,useOrgDict } from '@/utils/dict';
import { useJclb, useUnit } from '@/utils/lims';
import {
  parseStrEmpty,
  parseTime,
  resetForm,
  addDateRange,
  handleTree,
  selectDictLabel,
  selectDictLabels,
  getSupAndSub,
  getBackSupAndSub,
  mergeRecursive,
  adaptiveHeight,
  addListNoLimit,
  getItemByArray,
  getItemByArrays,
  getItemObjectByArray,
  downloadFile,
  rowDownloadFile,
  getSubFileHeight,
  getCondtion,
} from '@/utils/ruoyi';

// 分页组件
import Pagination from '@/components/Pagination';
// 自定义表格工具组件
import RightToolbar from '@/components/RightToolbar';
// 文件上传组件
import FileUpload from '@/components/FileUpload';
// 图片上传组件
import ImageUpload from '@/components/ImageUpload';
// 图片预览组件
import ImagePreview from '@/components/ImagePreview';
// 自定义树选择组件
import TreeSelect from '@/components/TreeSelect';
// 字典标签组件
import DictTag from '@/components/DictTag';
// 图片预览组件
import photoView from '@/components/photoView';

// import 'default-passive-events'
import $ from 'jquery';

window.jQuery = $;
window.$ = $;
const app = createApp(App);

// 全局方法挂载
app.config.globalProperties.useDict = useDict;
app.config.globalProperties.useShareDict = useShareDict;
app.config.globalProperties.useShareDictWait = useShareDictWait;
app.config.globalProperties.useOrgDict = useOrgDict;
app.config.globalProperties.useJclb = useJclb;
app.config.globalProperties.useUnit = useUnit;
app.config.globalProperties.download = download;
app.config.globalProperties.parseStrEmpty = parseStrEmpty;
app.config.globalProperties.parseTime = parseTime;
app.config.globalProperties.resetForm = resetForm;
app.config.globalProperties.handleTree = handleTree;
app.config.globalProperties.addDateRange = addDateRange;
app.config.globalProperties.selectDictLabel = selectDictLabel;
app.config.globalProperties.selectDictLabels = selectDictLabels;
app.config.globalProperties.getItemByArray = getItemByArray;
app.config.globalProperties.getItemByArrays = getItemByArrays;
app.config.globalProperties.getItemObjectByArray = getItemObjectByArray;
app.config.globalProperties.downloadFile = downloadFile;
app.config.globalProperties.rowDownloadFile = rowDownloadFile;
app.config.globalProperties.addListNoLimit = addListNoLimit;
app.config.globalProperties.getSubFileHeight = getSubFileHeight;
app.config.globalProperties.getCondtion = getCondtion;
app.config.globalProperties.getSupAndSub = getSupAndSub;
app.config.globalProperties.getBackSupAndSub = getBackSupAndSub;
app.config.globalProperties.mergeRecursive = mergeRecursive;
// 自适应高度
app.config.globalProperties.adaptiveHeight = adaptiveHeight;

// 全局组件挂载
app.component('DictTag', DictTag);
app.component('Pagination', Pagination);
app.component('TreeSelect', TreeSelect);
app.component('FileUpload', FileUpload);
app.component('ImageUpload', ImageUpload);
app.component('ImagePreview', ImagePreview);
app.component('RightToolbar', RightToolbar);
app.component('photoView', photoView);

app.use(router);
app.use(store);
app.use(plugins);
app.use(elementIcons);
app.component('svg-icon', SvgIcon);
const ElementLabelLine = getElementLabelLine(h);
app.component(ElementLabelLine.name, ElementLabelLine);

directive(app);

// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
  locale: locale,
  // 支持 large、default、small
  size: Cookies.get('size') || 'default',
});

app.mount('#app');
